Clojureでリバーシを作ってみる - Part4 リバーシの対話環境を作る
REPLに直接コードを書くことで、リバーシとして遊ぶことができるようになってきました。今度はもう少し遊びやすくするために、対話環境を作っていきたいと思います。ゲームとしての体裁を整える、と思ってもらえれば良いです。 とりあえず、目指したいのは以下のことができるような状態です。
新しいゲームを開始することができる
自分の石を置きたい場所を指定して、石をひっくり返すことができる
自分の手番をパスすることができる
現在の盤面の状態を分かりやすい形で見ることができる
前の手番のユーザーが石を置くかパスをしたら、自分の手番を実行することができる
黒と白、どちらの手番なのかを知ることができる
先頭からひとつずつ解決しくことにします。新しいゲームを開始するには、保存している置かれた石の情報を初期化したり、黒の手番から開始しなくてはなりません。新しいネームスペースreversi.systemを作って、簡単にそれを関数として表すとこうなります。
code:src/reversi/system.clj
(ns reversi.system
(defn new-game []
(store/reset-stones!)
(println "新しいゲームを開始します。")
(println "黒の番です。")
(println (view/render-board @store/stones))))
code:clojure
;;=> nil
reversi.core> (system/new-game)
新しいゲームを開始します。
黒の番です。
A | B | C | D | E | F | G | H
+-------------------------------+
1 | | | | | | | | |
---+---+---+---+---+---+---+---+---+
2 | | | | | | | | |
---+---+---+---+---+---+---+---+---+
3 | | | | | | | | |
---+---+---+---+---+---+---+---+---+
4 | | | | ○ | ● | | | |
---+---+---+---+---+---+---+---+---+
5 | | | | ● | ○ | | | |
---+---+---+---+---+---+---+---+---+
6 | | | | | | | | |
---+---+---+---+---+---+---+---+---+
7 | | | | | | | | |
---+---+---+---+---+---+---+---+---+
8 | | | | | | | | |
+-------------------------------+
;;=> nil